package co.edu.uniquindio.interfaz;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.util.Properties;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JSeparator;
import javax.swing.border.LineBorder;

import co.edu.uniquindio.mundo.Pregunta;
import javax.swing.border.SoftBevelBorder;
import javax.swing.border.BevelBorder;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class Recomendar extends JPanel {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JLabel lblPreguntas;
	private InterfazPrincipal principal;
	private JLabel campoPregunta;
	private JLabel lblPosiblesRespuestas;
	private JRadioButton rdbtnNewRadioButton;
	private JRadioButton rdbtnNewRadioButton_1;
	private JSeparator separator;
	private JButton btnResponder;
	private JSeparator separator_1;
	private JButton cargarPreguntas;
	private Pregunta[] preguntas;
	private int indice;
	private JLabel lblNotaLasRecomendaciones;
	private JLabel lblNota;
	private JLabel lblVectorY;
	private JLabel vectorY;
	private JLabel recomendacion;

	public Recomendar(InterfazPrincipal principal) {
		this.principal = principal;
		initGUI();
	}

	private void initGUI() {

		setLayout(null);
		this.setPreferredSize(new Dimension(500, 500));
		{
			lblPreguntas = new JLabel("Preguntas");
			lblPreguntas.setBounds(211, 6, 78, 25);
			add(lblPreguntas);
		}
		{
			campoPregunta = new JLabel("");
			campoPregunta.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null));
			campoPregunta.setBounds(65, 77, 376, 58);
			add(campoPregunta);
		}
		{
			lblPosiblesRespuestas = new JLabel("Posibles Respuestas:");
			lblPosiblesRespuestas.setBounds(124, 150, 125, 25);
			add(lblPosiblesRespuestas);
		}
		{
			rdbtnNewRadioButton = new JRadioButton("opcion A");
			rdbtnNewRadioButton.setBounds(148, 175, 141, 23);
			add(rdbtnNewRadioButton);
			rdbtnNewRadioButton.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					valiarSeleccion(0);
				}
			});
		}
		{
			rdbtnNewRadioButton_1 = new JRadioButton("opcion B");
			rdbtnNewRadioButton_1.setBounds(148, 205, 141, 23);
			add(rdbtnNewRadioButton_1);
			rdbtnNewRadioButton_1.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					valiarSeleccion(1);
				}
			});
		}
		{
			separator = new JSeparator();
			separator.setBounds(12, 239, 478, 15);
			add(separator);
		}
		{
			btnResponder = new JButton("Responder");
			btnResponder.setBounds(310, 189, 114, 23);
			add(btnResponder);
			btnResponder.setEnabled(false);
			btnResponder.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					
					if(indice < 14){
						if(verificarSeleccion()){
							int respuesta = (rdbtnNewRadioButton.isSelected()) ? -1 : 1 ; 
							preguntas[indice].asignarRespuesta(respuesta);
							indice++;
							asigarValoresPregunta(indice);
						}else
							JOptionPane.showMessageDialog(null, "Seleccione una opcion");
					}else if(indice == 14){
						if(verificarSeleccion()){
							int respuesta = (rdbtnNewRadioButton.isSelected()) ? -1 : 1 ; 
							preguntas[indice].asignarRespuesta(respuesta);
							btnResponder.setEnabled(false);
							enviarValoresRespuestas();
						}else
							JOptionPane.showMessageDialog(null, "Seleccione una opcion");
					}
				}
			});
		}
		{
			separator_1 = new JSeparator();
			separator_1.setBounds(10, 380, 480, 15);
			add(separator_1);
		}
		{
			cargarPreguntas = new JButton();
			this.add(cargarPreguntas);
			cargarPreguntas.setText("Cargar Preguntas");
			cargarPreguntas.setBounds(175, 42, 150, 23);
			cargarPreguntas.addActionListener(new ActionListener() {
				
				@Override
				public void actionPerformed(ActionEvent arg0) {
					if(cargar()){
						indice = 0;
						asigarValoresPregunta(indice);
						btnResponder.setEnabled(true);
						JOptionPane.showMessageDialog(null, "Se cargaron las preguntas");	
					}
					else 
						JOptionPane.showMessageDialog(null, "Error al cargar las preguntas");
				}
			});
		}
		{
			lblNotaLasRecomendaciones = new JLabel("Las recomendaciones dadas deben ser revisadas \r\npor un orientador profesional.");
			lblNotaLasRecomendaciones.setBounds(12, 338, 485, 25);
			add(lblNotaLasRecomendaciones);
		}
		{
			lblNota = new JLabel("Nota:");
			lblNota.setBounds(12, 302, 485, 25);
			add(lblNota);
		}
		{
			lblVectorY = new JLabel("Vector Y de los valores de activacion de las neuronas de salida:");
			lblVectorY.setBounds(12, 406, 485, 25);
			add(lblVectorY);
		}
		{
			vectorY = new JLabel("");
			vectorY.setBounds(12, 442, 485, 23);
			add(vectorY);
		}
		{
			recomendacion = new JLabel("");
			recomendacion.setBounds(12, 265, 485, 25);
			add(recomendacion);
		}
	}
	
	private boolean cargar()
	{
		try {
			Properties cargada = new Properties();
			FileInputStream in = new FileInputStream("src/co/edu/uniquindio/data/encuesta.properties");
			cargada.load(in);
			
			this.preguntas = new Pregunta[15];
			
			for (int i = 0; i < preguntas.length; i++) {
				String enunciado = cargada.getProperty((i+1)+".");
				String opcionA = cargada.getProperty((i+1)+".a.");
				String opcionB = cargada.getProperty((i+1)+".b.");
				
				Pregunta p = new Pregunta(enunciado, opcionA, opcionB);
				preguntas[i] = p;	
			}
			
			return true;
			
		} catch (Exception e) {
			return false;
		}
	}
	
	private void valiarSeleccion(int i){
		switch (i) {
		case 0:
			rdbtnNewRadioButton.setSelected(true);
			rdbtnNewRadioButton_1.setSelected(false);
			break;
			
		case 1:
			rdbtnNewRadioButton_1.setSelected(true);
			rdbtnNewRadioButton.setSelected(false);
			break;
		}
	}
	
	private void asigarValoresPregunta(int i){
		campoPregunta.setText(preguntas[i].getEnunciado());
		rdbtnNewRadioButton.setText(preguntas[i].getOpcionA());
		rdbtnNewRadioButton.setSelected(false);
		rdbtnNewRadioButton_1.setText(preguntas[i].getOpcionB());
		rdbtnNewRadioButton_1.setSelected(false);
	}
	
	private boolean verificarSeleccion(){
		return rdbtnNewRadioButton.isSelected() || rdbtnNewRadioButton_1.isSelected();
	}
	
	private void enviarValoresRespuestas(){
		int[] respuestas = new int[16];
		for (int i = 0; i < preguntas.length; i++) 
			respuestas[(i+1)] = preguntas[i].getRespuesta();
		respuestas[0] = 1;
		double[] y = principal.getRetropropagacion().analizarValoresX(respuestas);
		for (double d : y) 
			vectorY.setText(vectorY.getText()+"  "+d);
	}
}
